package com.ruoyi.common.utils.ip;

import javax.servlet.http.HttpServletRequest;

public class URLUtils {

    public static String getBaseURl(HttpServletRequest request) {

        String scheme = request.getScheme(); // 获取请求的协议，如 "http" 或 "https"
        String serverName = request.getServerName(); // 获取服务器名称
        int serverPort = request.getServerPort();// 获取服务器端口
        String contextPath = request.getContextPath();// 获取上下文路径

        // 建议在此处插入以下代码查看上下文路径是否符合期望，因为有时候可能部署之类导致不对
        System.out.println("contextPanth: " + contextPath);
        StringBuffer url =  new StringBuffer();
        url.append(scheme).append("://").append(serverName);

        // 判断服务器端口是否为标准的 HTTP（80）或 HTTPS（443）端口，决定是否将端口号添加到 URL 中

        // 当浏览器发起 HTTP 请求时，通常会使用默认的端口号，即 HTTP 使用 80 端口，HTTPS 使用 443 端口。这些端口号是默认的，因此在 URL 中不需要显式指定
        // 然而，如果应用程序部署在非默认的端口上，例如使用自定义的端口号（例如 8080、3000 等），则需要将该端口号包含在 URL 中，以确保浏览器能够正确地访问应用程序

        if ((serverPort != 80) && (serverPort != 443)) {
            url.append(":").append(serverPort);
        }
        url.append(contextPath);

        if(url.toString().endsWith("/")){ // URL 是否以斜杠结尾，如果不是，则添加斜杠
            url.append("/");
        }
        return url.toString(); // 获取当前请求的完整 URL
    }

}
